﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Http;

namespace AspnetCore04
{
    public class StartupRoute
    {
        public void ConfigureServices(IServiceCollection services)
        {

        }

        //运行主机,就执行一次,把中间件添加到管道里
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            //ASP.NET Core 2.x mvc、webapi 是各自实现路由
            //ASP.NET Core 3.x 新增加的两个中间件:UseRouting、UseEndpoints,是成对出现的

            //负责匹配路由与终结点(端点)的,解析出路由信息,写进HttpContext,传给下一个中间件
            //端点就是一个终端中间件(末尾的),不止有一个,每一个Action,都可以是一个终端中间件
            //谁来选择,把请求解析成了路由,根据路由信息来选择一个端点,谁来选择,谁来执行
            app.UseRouting();

            //这里添加其它中间件、获取路由信息,包括路由数据(路由模板),获取对应中间件
            app.Use(async (context,next) =>
            {
                 //插断点查看ep的路由信息
                 var ep =context.GetEndpoint();
                 await next();
            });

            //负责执行、配置
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/",async context=>
                {
                    await context.Response.WriteAsync("Hello World!");
                });

                endpoints.MapGet("/home", async context =>
                {
                    await context.Response.WriteAsync("Hello Home!");
                });
            });


            //WebAPI中使用MVC模板,这样在WebAPI中就能按照/Controller/Action的方式来调用api了
            //app.UseRouting();

            //app.Use(async (context, next) =>
            //{
            //    //查看路由模板信息
            //    var ep = context.Request.RouteValues;
            //    await next();
            //});

            //app.UseEndpoints(endpoints =>
            //{
            //    endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
            //});


        }

    }
}
